home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 3 / BBS in a box - Trilogy III.iso / Files / Prog / A / 10⁄92 & 11⁄92 Mailing / SwapMMUModeƒ / SwapMMUMode1.p < prev    next >
Encoding:
Text File  |  1992-08-31  |  987 b   |  52 lines  |  [TEXT/MPS ]

  1. UNIT Ext4D_SwapMMU;
  2.  
  3. {$IFC Undefined THINK_PASCAL }
  4.     {$D- }
  5.     {$R- }
  6. {$ENDC }
  7.  
  8. INTERFACE
  9.  
  10. {$IFC Undefined THINK_PASCAL }
  11.     Uses    MemTypes,
  12.           Memory,
  13.                 QuickDraw,
  14.                 OSIntf,
  15.             ToolIntf,
  16.                 PackIntf,
  17.                 OSUtils;
  18. {$ENDC}
  19.  
  20. {$IFC Undefined THINK_PASCAL }
  21.     {$D+ }
  22.     {$R- }
  23. {$ENDC }
  24.  
  25. PROCEDURE GrabMemory(VAR FromAddr:LongInt;VAR Result:Str255);
  26.  
  27. IMPLEMENTATION
  28.  
  29. PROCEDURE GrabMemory(VAR FromAddr:LongInt;VAR Result:Str255);
  30. CONST Max24BitsAddr = 8388608;
  31. VAR        CurMMUMode:SignedByte;
  32. BEGIN
  33.     Result[0]:=Chr(128);
  34.   IF FromAddr>=0 THEN
  35.     BEGIN
  36.         IF FromAddr>=Max24BitsAddr THEN
  37.         BEGIN
  38.             CurMMUMode:=GetMMUMode;
  39.             IF CurMMUMode=False32b THEN
  40.             BEGIN
  41.                 CurMMUMode:=True32b;
  42.                 SwapMMUMode(CurMMUMode);                                                    { Under 24 bit, It crashes at this line }
  43.             END;
  44.             BlockMove(Ptr(FromAddr),Ptr(ORD4(@Result)+1),128);
  45.             IF CurMMUMode=False32b THEN SwapMMUMode(CurMMUMode);
  46.         END
  47.         ELSE BlockMove(Ptr(FromAddr),Ptr(ORD4(@Result)+1),128);
  48.     END
  49.     ELSE Result:='Bad address';
  50. END;
  51.  
  52. END.